package com.gcsoftware.web.service.elasticsearch;

import com.gcsoftware.web.beans.elasticsearchData.Hit;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;

/**
 * ES Rest API 模板接口
 * @author czp
 * date : 2018-04-10
 */
public interface Repository<T> {
    /**
     * DSL获取分页数据
     * @param index 索引
     * @param type 类型
     * @param query 查询条件
     * @param pageable 分页对象
     * @param fields 选择要输出的字段
     * @param sort asc/desc
     * @return T
     */
    Page<Hit<T>> queryDslByPage(String index, String type, String query, Pageable pageable, List<String> fields, String sort);

    /**
     * DSL获取List结果
     * @param index 索引
     * @param type 类型
     * @param query 查询条件
     * @return T
     */
    List<Hit<T>> queryDslByList(String index, String type, String query, List<String> fields);

    /**
     * DSL根据ID获取值
     * @param index 索引
     * @param type 类型
     * @param id ID
     * @return T
     */
    Hit<T> queryDslById(String index, String type, String id, List<String> fields);

    /**
     * DSL获取SQL语句统计分组
     * @param index 索引
     * @param type 类型
     * @param query 查询
     * @param aggs 聚合
     * @param group 分组
     * @return T
     */
    T queryDslGroup(String index, String type, String query, String aggs, String group);

    /**
     * 统计字段关联多少条日志
     * @param index 索引
     * @param type 类型
     * @param query 查询
     * @return 个数
     */
    long fieldCount (String index, String type, String query);
}
